//5.在home.js文件中获取app实例  注意，由于wx.request是异步操作，所以页面初始化的时候，未必能马上打印
const app = getApp()

Page({

    /**
     * 页面的初始数据
     */
    data: {
        //窗口的可用高度
        wh: 0,
        //摄像头朝向  front 就是前置摄像头，back就是后置摄像头
        position: 'front',
        //照片路径
        photoSrc: "",
        //是否显示图片的flag  默认为false
        isShowPhoto: false,
        //人脸信息
        faceInfo: null,
        //人脸信息映射关系
        faceInfoMap: {
            //性别映射
            gender: {
                male: '男',
                female: '女'
            },
            //表情映射
            expression: {
                none: '不笑',
                smile: '微笑',
                laugh: '大笑'
            },
            //情绪映射
            emotion: {
                angry: '愤怒',
                disgust: '厌恶',
                fear: '恐惧',
                happy: '高兴',
                sad: '伤心',
                surprise: '惊讶',
                neutral: '无表情',
                pouty: '撅嘴',
                grimace: '鬼脸'
            },
            //glasses 是否带眼镜
            glasses: {
                none: '无眼镜',
                common: '普通眼镜',
                sun: '墨镜'
            }
        },
        //控制是否显示检测结果的开关  初始化为false
        isShowResult: false
    },
    //重新选择照片的函数
    reChoose() {
        //重新选择照片就是把显示图片的 flag重置为false,并清空 照片路径
        this.setData({
            isShowPhoto: false,
            photoSrc: ""
        })
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        //获取系统信息
        const sysInfo = wx.getSystemInfoSync()
        //将获取到的系统的高度赋值给 WH
        this.setData({
            wh: sysInfo.screenHeight
        })
        console.log(this.data.wh)
    },

    //翻转摄像头的函数
    reverseCamera() {
        //对摄像头的位置取反
        const newPosition = this.data.position === 'front' ? 'back' : 'front'
        //重新设置摄像头朝向
        this.setData({
            position: newPosition
        })
    },
    //测颜值函数
    getFaceInfo() {
        this.setData({
            //控制允许显示颜值检测结果
            isShowResult: false
        })
        //显示数据加载效果
        wx.showLoading({
          title: '颜值检测中...'
        })

        //将全局的token赋值给一个常量
        const token = app.globalData.access_token
        //判断token是否存在
        if (!token) {
            return wx.showToast({
                title: '鉴权失败',
                icon: "error"
            })
        }

        //获取fileManager
        const fileManager = wx.getFileSystemManager()
        //将获取到的照片转成BASE64格式的字符串
        const fileBase64Str = fileManager.readFileSync(this.data.photoSrc, 'base64')

        //1.发起请求，检测颜值数据
        wx.request({
            //根据文档要求，使用post这种请求方式
            method: 'POST',
            //根据文档要求，请求这个地址
            url: `https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=${token}`,
            //根据文档要求，设置请求头
            header: {
                'Content-Type': 'application/json'
            },
            //根据文档要求，设置请求体
            data: {
                //图片类型
                image_type: 'BASE64',
                //图片本身
                image: fileBase64Str,
                //需要返回信息中携带的属性 age年龄 beauty颜值  expression表情      glasses是否戴眼镜   emotion情绪
                face_field: 'age,beauty,expression,gender,glasses,emotion'
            },
            //成功的回调
            success: (rs) => {
                // console.log(rs) 
                //如果返回信息中的 rs.data.result.face_num <= 0 表明没有检测到人脸
                if (!rs.data.result||rs.data.result.face_num <= 0) {
                    return wx.showToast({
                        title: '未检测到人脸信息',
                        icon: 'none'
                    })
                }
                //代码走到这里表明取到了人脸信息，在这里进行赋值
                this.setData({
                    faceInfo: rs.data.result.face_list[0],
                    //控制允许显示颜值检测结果
                    isShowResult: true
                })

                //打印信息
                console.log("检测到的人脸信息，", this.data.faceInfo)
            },
            //失败的回调
            fail: () => {
                wx.showToast({
                    title: '颜值检测失败',
                    icon: "error"
                })
                this.setData({
                    //控制允许显示颜值检测结果
                    isShowResult: false
                })
            },
            //加载完成，
            complete:()=>{
                // /关闭 颜值检测的加载效果
                wx.hideLoading()
            }
        })
    },
    //拍照的函数
    takePhoto() {
        //创建相机实例
        const camera = wx.createCameraContext()
        //相机实例调用拍照方法
        camera.takePhoto({
            //成像质量
            quality: "high",
            //成功拍照的回调  这里不要使用普通函数，需要使用匿名函数，因为这样就能避免this指向问题
            success: (rs) => {
                // console.log("拍照成功了",rs)
                //成功拍照后  将拍照的路径赋值给photoSrc
                this.setData({
                    //图片路径赋值
                    photoSrc: rs.tempImagePath,
                    //展示照片
                    isShowPhoto: true
                }, () => {
                    this.getFaceInfo()
                })
            },
            fail: (rs) => {
                // console.log("拍照失败了",rs)
                //拍照失败，清空照片路径
                this.setData({
                    photoSrc: "",
                    isShowPhoto: false
                })
            }
        })
    },
    //选择图片的函数
    chooseImg() {
        wx.chooseImage({
            //只允许选择1张照片
            count: 1,
            //图片尺寸  这里选择原尺寸
            sizeType: ['original'],
            //图片源  这里只选择相册
            sourceType: ['album'],
            //选择OK后的回调
            success: (rs) => {
                // console.log("拍照成功", rs)
                //判断是否有选择到东西
                if (rs.tempFilePaths.length > 0) {
                    //如果选择到了照片，就进行赋值
                    this.setData({
                        //给图片路径赋值
                        photoSrc: rs.tempFilePaths[0],
                        //展示图片
                        isShowPhoto: true
                    }, () => {
                        this.getFaceInfo()
                    })
                }
            },
            //选择失败或者未选择的回调
            fail: () => {
                // console.log("选择照片失败")
                this.setData({
                    isShowPhoto: false,
                    photoSrc: ""
                })

            }
        })
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})